<?php
class Title_Bd {

 
  /* Initialisation d'un objet Title à partir d'un id_title */ 
	public static function getTitle($id) {  
	 	$db = Outils_Bd::getInstance()->getConnexion();
		$sth=$db->prepare("SELECT * FROM Title WHERE id_title=:id");
		$data=array('id' => $id);
		$sth->execute($data);
		$ligne = $sth->fetch(PDO::FETCH_ASSOC);
  
		/*retourner un objet Title */
		return new Title($ligne);
  	}
	
	/* IMPORTANT : requete venant des sous classes de Recommandation : retourne un objet Title */
	public static function getTitleFromRecommendation($query) {  
	 	$db = Outils_Bd::getInstance()->getConnexion();
		$sth=$db->prepare($query);
		$sth->execute();
		$ligne = $sth->fetch(PDO::FETCH_ASSOC);
  
		/*retourner un objet Title */
		return new Title($ligne);
  	}
	
	// Test si une vidéo est déjà présente
	
	public static function checkIfVideo($ytid){
		$db = Outils_Bd::getInstance()->getConnexion();
	  	$sth=$db->prepare("SELECT * FROM Title WHERE youtube_id=:yt_id");
	  	$sth->execute(array('yt_id' => $ytid));
	  	$ligne = $sth->fetch(PDO::FETCH_ASSOC);
	 	if ($ligne !==false)
			return new Title($ligne);
		else
			return false;
	}
	
	// Methode count
    public static function count($clause="1=1", $data=array()) {
	 	$db = Outils_Bd::getInstance()->getConnexion();
	  	$sth=$db->prepare("SELECT count(*) as totalItems FROM Title WHERE {$clause}");
	  	$sth->execute($data);
	  	$ligne = $sth->fetch(PDO::FETCH_ASSOC);
	 	return $ligne['totalItems'];
  	}
	
	/* Méthode getTitlesFromSearch($clause) : Pour la recherche de titres : retourne un tableau d'objets Title */
	public static function getTitlesFromSearch($clause,$data=array()){
		$db = Outils_Bd::getInstance()->getConnexion();
		$requete = "SELECT * FROM Title WHERE {$clause}";
		
		if (isset($data['offset'])) {
			$requete .=	" LIMIT {$data['offset']}, {$data['itemsPerPage']}";
			unset($data['offset']);
			unset($data['itemsPerPage']);
		}
		
		$sth=$db->prepare($requete);
		$sth->execute();
		$liste = array();
		while (($ligne = $sth->fetch(PDO::FETCH_ASSOC)) !== false) {
		  	// ajouter un objet Title dans le tableau
		  	$liste[] = new Title($ligne);
		}
		return $liste;
	}
	
	// Méthode Test relevance : FULL TEXT UNIQUEMENT
	public static function getRelevance($clauseRelevance,$clausePlus="") {
		
	 	$db = Outils_Bd::getInstance()->getConnexion();
	  	$sth=$db->prepare("SELECT *,{$clauseRelevance} as relevance FROM Title WHERE {$clauseRelevance} {$clausePlus}");
	  	$sth->execute();
	  	$ligne = $sth->fetch(PDO::FETCH_ASSOC);
	 	return $ligne;
  	}
	
	
	// Méthode addTitle($title) : ajoute une évaluation dans la table Rating
	static public function addTitle($title) { 
 
		$db = Outils_Bd::getInstance()->getConnexion();
		$sth=$db->prepare("INSERT INTO Title ( name, artist, youtube_id ) VALUES ( :name, :artist, :youtube_id )");
		$sth2=$db->prepare("SELECT * FROM Title WHERE id_title=LAST_INSERT_ID()");
		$data=array(
			'name' => $title->getName(),
			'artist' => $title->getArtist(),
			'youtube_id' => $title->getYoutubeId()
			);
	
		$sth->execute($data);
		$sth2->execute();
		$ligne = $sth2->fetch(PDO::FETCH_ASSOC);
		return new Title($ligne);
	}
	
	static public function getTop5($limit){
		$db = Outils_Bd::getInstance()->getConnexion();
		$requete = "SELECT Title.* FROM Title INNER JOIN Popularity ON Title.id_title=Popularity.id_title ORDER BY popularity DESC LIMIT {$limit}";
		$sth=$db->prepare($requete);
		$sth->execute();
		$liste = array();
		while (($ligne = $sth->fetch(PDO::FETCH_ASSOC)) !== false) {
		  	// ajouter un objet Title dans le tableau
		  	$liste[] = new Title($ligne);
		}
		return $liste;
	}
	

}
?>